Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Большая нагрузка в цикле с запросом SQL (NetWork)
Author Message
NetWork
Участник форума



Joined: 11 May 2007
Posts: 46
Карма: -4
   поощрить/наказать


PostPosted: Fri Nov 16, 2007 4:57 pm (написано за 4 минуты 46 секунд)
   Post subject: Большая нагрузка в цикле с запросом SQL
Reply with quote

Мне необходимо было получить кол-во показов баннеров на сайте в разное время суток.
Я сделал вот так.
Code (php): скопировать код в буфер обмена
        for($i=0; $i<=23; $i++) {

                $begin = $i + 1;

                #
                #

                #
                if($begin == 0) $tmp2 = "";
                else $tmp2 = " AND data >= date_format(date_sub(now(),interval '0' day),'%Y-%m-%d 00:00:00') + interval '$i' hour";

                $tmp1 = "data < date_format(date_sub(now(),interval '0' day),'%Y-%m-%d 00:00:00') + interval '$begin' hour";
                $ends = $tmp1.$tmp2;

                $hits = @mysql_result (www.php.net/mysql_result)(@mysql_query (www.php.net/mysql_query)("SELECT COUNT(*) AS count FROM stat WHERE id_account='$account[id]' AND ".$ends), 0);

                #
                if($begin == 0) $tmp2s = "";
                else $tmp2s = " AND data >= date_format(date_sub(now(),interval '1' day),'%Y-%m-%d 00:00:00') + interval '$i' hour";

                $tmp1s = "data < date_format(date_sub(now(),interval '1' day),'%Y-%m-%d 00:00:00') + interval '$begin' hour";
                $ends = $tmp1s.$tmp2s;

                $hitss = @mysql_result (www.php.net/mysql_result)(@mysql_query (www.php.net/mysql_query)("SELECT COUNT(*) AS count FROM stat WHERE id_account='$account[id]' AND ".$ends), 0);
        }
тут я получаю статистику за сегодня и за вчера. Но в базе у меня больше 1 000 000 записей. Из-за этого скрипт долго выводит результат. Как быть помогите. Подскажите может нужно просто отдельную таблицу для часов показов создать? Сейчас у меня всё в одном логе ведётся, а так будет отдельная таблица с id и часами и уже в php определять какое сейчас время и в нужную мне таблицу добавлять + 1. Или может я в запросе SQL намудрил и систему сильно грузит вот это:
Code (SQL): скопировать код в буфер обмена
date_format(date_sub(now(),interval '1' day),'%Y-%m-%d 00:00:00') + interval '$begin' hour
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Fri Nov 16, 2007 8:57 pm (спустя 3 часа 59 минут; написано за 1 минуту 31 секунду)
   Post subject:
Reply with quote

NetWork
индекса-то небось нет?
имхо: введите еще один столбец hours - целая часть от UNIX_TIMESTAMP(`data`)/3600 , индекс по нему и вперед. Или 2 столбца: hours и days .
Back to top
View user's profile Send private message
Guest






Карма: 388
   поощрить/наказать


PostPosted: Fri Nov 16, 2007 9:12 pm (спустя 14 минут; написано за 25 секунд)
   Post subject:
Reply with quote

Индекс у каждой записи есть. Если вы Maus об этом.
Back to top
NetWork
Участник форума



Joined: 11 May 2007
Posts: 46
Карма: -4
   поощрить/наказать


PostPosted: Fri Nov 16, 2007 9:19 pm (спустя 7 минут; написано за 2 минуты 5 секунд)
   Post subject:
Reply with quote

Выше пост мой. Забыл авторизоваться :). Точнее я имел введу ключь у каждой записи есть. Что за индекс не очень понятно.
Back to top
View user's profile Send private message
Maus
Модератор



Joined: 29 Jun 2003
Posts: 8151
Карма: 271
   поощрить/наказать

Location: пос. Омсукчан Магаданской области

PostPosted: Fri Nov 16, 2007 10:57 pm (спустя 1 час 38 минут; написано за 23 секунды)
   Post subject:
Reply with quote

NetWork
dev.mysql.com/doc/refman/4.1/en/create-index.html
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
You cannot post new topics in this forum. You cannot reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML